/*
*Copyright 2021-2023 NERCIS
*
*Licensed under the Apache License, Version 2.0 (the "License");
*you may not use this file except in compliance with the License.
*You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*Unless required by applicable law or agreed to in writing, software
*distributed under the License is distributed on an "AS IS" BASIS,
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*See the License for the specific language governing permissions and
*limitations under the License.
*/

package cn.ac.nercis.pes.model.dto.common;

import org.apache.commons.lang3.StringUtils;

/**
 * 结果状态枚举
 * @author zpy
 * @version 1.0.0
 */
public enum ResultCode {
    /**成功**/
    SUCCESS("200", "成功"),
    /**失败**/
    FAIL("300", "失败"),

    /**重命名失败**/
    RENAME_FAIL("330", "重命名失败"),
    /**格式不正确**/
    FORMAT_FAIL("340", "格式不正确"),

    /**未找到对应的信息**/
    NOT_FOUND("404", "未找到对应的信息"),


    /**用户不存在**/
    USER_NOT_EXIST("A0201", "用户不存在"),
    /**用户密码不正确**/
    USER_PWD_ERROR("A0202", "用户密码不正确"),
    /**用户名已存在**/
    USER_NAME_EXIST("A0203", "用户名已存在"),
    /**系统预置的用户无法删除**/

    USER_NOT_ALLOW_DELETE("A204", "系统预置的用户无法删除"),

    /**角色不存在**/
    ROLE_NOT_EXIST("A0301", "角色不存在"),

    /**测评单位不存在**/
    EVALUATION_UNIT_NOT_EXIST("A0401", "测评单位不存在"),

    /**被测单位不存在**/
    TESTED_UNIT_NOT_EXIST("A0501","被测单位不存在"),
    /**被测单位名已存在**/
    TESTED_UNIT_NAME_EXIST("A0502","被测单位名已存在"),
    /**被测单位已被项目引用**/
    TESTED_UNIT_REF_EXIST("A0503","被测单位已被项目引用"),

    /**项目信息不存在**/
    PROJECT_NOT_EXIST("A0601","项目信息不存在"),
    /**项目编号已存在**/
    PROJECT_NUMBER_EXIST("A0602","项目编号已存在"),
    /**项目包含系统无法删除**/
    PROJECT_SYSTEM_EXIST("A0603","项目包含系统无法删除"),

    /**系统信息不存在**/
    SYSTEM_NOT_EXIST("A0701","系统信息不存在"),
    /**系统名称已存在**/
    SYSTEM_NAME_EXIST("A0702","系统名称已存在"),
    /**当前无系统信息**/
    EMPTY_SYSTEM("A0703","当前无系统信息"),

    /**系统安全等级保护未定级**/
    SECURITY_LEVEL_UNDEFINED("A0801","系统安全等级保护未定级"),
    /**不支持的系统安全等级保护定义**/
    SECURITY_LEVEL_NOT_SUPPORT("A0802","不支持的系统安全等级保护定义，当前只支持二、三、四级"),
    /**系统指标初始化失败**/
    SYSTEM_TARGET_INIT_FAIL("A0803","系统指标初始化失败"),
    /**指定的系统指标不存在**/
    SYSTEM_TARGET_NOT_EXIST("A0804","指定的系统指标不存在"),

    /**当前系统无系统资产**/
    EMPTY_SYSTEM_ASSET_DATA("A0901","当前系统无系统资产"),
    /**当前系统未确认指标范围**/
    EMPTY_SYSTEM_TARGET_DATA("A0902","当前系统未确认指标范围"),
    /**系统资产必须关联到测评单元指标**/
    EMPTY_ASSET_TARGET_RELATED("A0903","系统资产必须关联到测评单元指标"),
    /**指定的资产对象不存在**/
    ASSET_NOT_EXIST("A0904","指定的资产对象不存在"),
    /**指定的系统资产对象测评方式不存在**/
    ASSET_EVALUATION_METHOD_NOT_EXIST("A0905","指定的系统资产对象测评方式不存在"),
    /**系统资产对象导入失败**/
    ASSET_IMPORT_FAIL("A0906","系统资产对象导入失败"),
    /**系统资产对象导入覆盖原有资产对象失败**/
    ASSET_IMPORT_COVER_FAIL("A0907","系统资产对象导入覆盖原有资产对象失败"),

    /**测评记录信息不存在**/
    EVALUATION_RECORD_NOT_EXIST("A1001","测评记录信息不存在"),
    /**当前无测评记录信息**/
    EMPTY_EVALUATION_RECORD_BY_UNIT_TARGET("A1002","当前无测评记录信息"),
    /**单元测评结果分析信息不存在**/
    UNIT_EVALUATION_RESULT_ANALYSIS_NOT_EXIST("A1003","单元测评结果分析信息不存在"),
    /**无需要修正的测评记录信息**/
    EMPTY_CORRECTION_EVALUATION_RECORD("A1004","无需要修正的测评记录信息"),
    /**修正的测评记录信息不存在**/
    CORRECTION_EVALUATION_RECORD_NOT_EXIST("A1005","修正的测评记录信息不存在"),

    /**当前系统报告信息已存在**/
    EVALUATION_REPORT_INFO_EXIST("A2001","当前系统报告信息已存在"),
    /**报告信息不存在**/
    EVALUATION_REPORT_INFO_NOT_EXIST("A2002","报告信息不存在");


    private final String code;
    private final String msg;

    ResultCode(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public String getMsg() {
        return this.msg;
    }

    @Override
    public String toString() {
        return this.code;
    }

    public static ResultCode fromCode(String code) {
        ResultCode[] items = values();
        for (ResultCode item : items) {
            if (StringUtils.equals(item.code,code)) {
                return item;
            }
        }
        return null;
    }
}